home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 40
/
Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso
/
Aminet
/
comm
/
tcp
/
Amster.lha
/
Amster_Install
/
Source
/
prefs.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-07-25
|
33KB
|
1,022 lines
/*
** Preferences
*/
#include "include/config.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include "include/mui.h"
#include <mui/NListview_mcc.h>
#include <libraries/asl.h>
#include <proto/dos.h>
#include "include/download.h"
#include "include/gui.h"
#include "include/search.h"
#include "include/panel.h"
#include "include/prefs.h"
#include "include/share.h"
#include "amster_Cat.h"
#include "include/protos.h"
struct prefsdata myprefs;
struct prefsdata *prf = &myprefs;
int prf_eventflags[] = { 3, 0, 3, 3, 3, 3, 3, 1 };
static struct MUI_CustomClass *QueueClass;
MUIF QueueDispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg);
ULONG prf_new(struct IClass *cl, Object *obj, struct opSet *msg);
void prf_set(struct prfdata *data);
void prf_use(struct prfdata *data);
void snd_play(char *fname);
void prf_entry(struct prfdata *data);
MUIF prf_dispatch(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
{
struct prfdata *data = INST_DATA(cl,obj);
switch(msg->MethodID) {
case OM_NEW:
return(prf_new(cl,obj,(APTR)msg));
case OM_DISPOSE:
if (QueueClass) MUI_DeleteCustomClass(QueueClass);
return(DoSuperMethodA(cl, obj, msg));
case PRF_UPDATE:
if (gui_onlinestate == ONLINE) nap_sendbuf(NAPC_EMAILCHANGE,prf->email);
else MUI_Request(gui->app, gui->swin, 0L, (char *)MSG_ERROR_TITLE, (char *)MSG_OK_GAD, (char *)MSG_ERROR_UPDATEEMAIL);
return NULL;
case PRF_OPEN:
prf_set(data);
set(obj,MUIA_Window_Open,TRUE);
return NULL;
case PRF_USE:
prf_use(data);
set(obj,MUIA_Window_Open,FALSE);
return NULL;
case PRF_LASTSAVED:
{
u_long tmp;
prf_setup(0, NULL);
if (prf_load("ENVARC:"AMSTER_PREFS)) {
DoMethod(gui->searchpanel, SEARCH_SET);
GetAttr(MUIA_Window_Open, obj, &tmp);
if (tmp==TRUE) prf_set(data);
}
return NULL;
}
case PRF_SAVE:
prf_use(data);
set(obj,MUIA_Window_Open,FALSE);
prf_save("ENVARC:"AMSTER_PREFS);
return NULL;
case PRF_SAVEALL:
{
u_long tmp;
GetAttr(MUIA_Window_Open, obj, &tmp);
if (tmp==TRUE) {
prf_use(data);
}
else prf_save("ENV:"AMSTER_PREFS);
prf_save("ENVARC:"AMSTER_PREFS);
return NULL;
}
case PRF_CANCEL:
set(obj, MUIA_Window_Open, FALSE);
return NULL;
case PRF_TESTSND:
{
u_long tmp;
GetAttr(MUIA_String_Contents, data->EventSoundString, &tmp);
if (((char *)tmp)[0] != '\0') snd_play((char *)tmp);
return NULL;
}
case PRF_FIREWALL:
{
u_long tmp;
GetAttr(MUIA_Selected, data->FirewallToggle, &tmp);
if (tmp==TRUE)
set(data->PortString, MUIA_Disabled, TRUE);
else
set(data->PortString, MUIA_Disabled, FALSE);
return NULL;
}
case PRF_ENTRY:
prf_entry(data);
return NULL;
case PRF_VALIDDELAY:
{
u_long tmp;
GetAttr(MUIA_String_Integer, data->ST_QueueDelay, &tmp);
if ((int)tmp < 1) set(data->ST_QueueDelay, MUIA_String_Integer, prf->QueueDelay);
return NULL;
}
}
return DoSuperMethodA(cl, obj, msg);
}
/*
** This is the Queue custom class, a sub class of Slider.mui. Overrides the
** MUIM_Numeric_Stringify method to implement custom display in slider gadget.
*/
MUIF QueueDispatcher(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
{
if (msg->MethodID==MUIM_Numeric_Stringify)
{
struct QueueData *data = INST_DATA(cl,obj);
struct MUIP_Numeric_Stringify *m = (APTR)msg;
if (m->value<26)
{
sprintf(data->buf,"%3ld", m->value);
}
else
{
strcpy(data->buf, MSG_PRF_QUEUE_UNLIMITED);
}
return((ULONG)data->buf);
}
return(DoSuperMethodA(cl,obj,msg));
}
ULONG prf_new(struct IClass *cl, Object *obj, struct opSet *msg)
{
static char *pages[] = {
(char *)_MSG_PRF_USER_TAB,
(char *)_MSG_PRF_OPTIONS_TAB,
(char *)_MSG_PRF_EVENTS_TAB,
(char *)_MSG_PRF_ADVANCED_TAB,
NULL
};
static char *events[] = {
(char *)_MSG_PRF_EVT_START,
(char *)_MSG_PRF_EVT_EXIT,
(char *)_MSG_PRF_EVT_CONN,
(char *)_MSG_PRF_EVT_DISC,
(char *)_MSG_PRF_EVT_DLFIN,
(char *)_MSG_PRF_EVT_ULFIN,
(char *)_MSG_PRF_EVT_DLERR,
(char *)_MSG_PRF_EVT_PLAY,
NULL
};
static char *lamps[] = {
(char *)_MSG_PRF_LAMPLAMP,
(char *)_MSG_PRF_LAMPTWF,
NULL
};
static char *ServerListOpts[] = {
(char *)_MSG_PRF_SERVERLIST_FORGET,
(char *)_MSG_PRF_SERVERLIST_SAVE,
(char *)_MSG_PRF_SERVERLIST_CACHE,
NULL
};
static char *AutoCleanupOpts[] = {
(char *)_MSG_PRF_AUTOCLEANUP_NONE,
(char *)_MSG_PRF_AUTOCLEANUP_DOWNLOADS,
(char *)_MSG_PRF_AUTOCLEANUP_UPLOADS,
(char *)_MSG_PRF_AUTOCLEANUP_BOTH,
NULL
};
struct prfdata *data;
Object *UserString, *PasswordString, *EMailString, *EMailButton, *DownloadPathString, *LinkSpeedCycle;
Object *ClearListToggle, *AutoConnectToggle, *AskFileToggle, *AutoSaveToggle, *AutoAddToggle;
Object *LampCycle, *CY_ServerList, *CY_AutoCleanup, *ST_NameLength;
Object *EventList, *EventScriptString, *EventSoundString, *EventTestButton;
Object *MetaServerString, *ServerString, *PortString, *FirewallToggle;
/* Object *VersionString;*/
Object *DownloadQueueSlider, *UploadQueueSlider, *DownloadPriSlider, *UploadPriSlider;
Object *ST_QueueRetries, *ST_QueueDelay;
Object *SaveButton, *UseButton, *CancelButton;
QueueClass = MUI_CreateCustomClass(NULL, MUIC_Slider, NULL, sizeof(struct QueueData), QueueDispatcher);
if (pages[0] == (char *)_MSG_PRF_USER_TAB)
localize_array(pages);
if (events[0] == (char *)_MSG_PRF_EVT_START)
localize_array(events);
if (lamps[0] == (char *)_MSG_PRF_LAMPLAMP)
localize_array(lamps);
if (ServerListOpts[0] == (char *)_MSG_PRF_SERVERLIST_FORGET)
localize_array(ServerListOpts);
if (AutoCleanupOpts[0] == (char *)_MSG_PRF_AUTOCLEANUP_NONE)
localize_array(AutoCleanupOpts);
if (obj = (Object *)DoSuperNew(cl, obj,
MUIA_HelpNode, "config",
MUIA_Window_Title, MSG_PRF_TITLE,
MUIA_Window_ID, MAKE_ID('S','E','T','T'),
WindowContents, VGroup,
Child, RegisterGroup(pages),
Child, VGroup,
Child, ColGroup(2), GroupFrameT(MSG_PRF_ACCOUNT_FRAME),
MUIA_HelpNode, "conf-user",
Child, Label2(MSG_PRF_USERNAME),
Child, UserString = StringObject,
StringFrame,
MUIA_String_Reject, ":%$ ",
MUIA_String_AdvanceOnCR, TRUE,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_USERNAME_HELP,
End,
Child, Label2(MSG_PRF_PASSWORD),
Child, PasswordString = StringObject,
StringFrame,
MUIA_String_Reject, " ",
MUIA_String_AdvanceOnCR, TRUE,
MUIA_String_Secret, TRUE,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_PASSWORD_HELP,
End,
Child, Label2(MSG_PRF_EMAIL),
Child, HGroup,
Child, EMailString = StringObject,
StringFrame,
MUIA_HorizWeight, 150,
MUIA_String_AdvanceOnCR, TRUE,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_EMAIL_HELP,
End,
Child, EMailButton = SimpleButton(MSG_PRF_UPDATE_GAD),
MUIA_ShortHelp, MSG_PRF_UPDATE_HELP,
End,
Child, Label2(MSG_PRF_CONNECTION),
Child, LinkSpeedCycle = CycleObject,
MUIA_Cycle_Active, prf->link,
MUIA_Cycle_Entries, nap_linktype,
MUIA_ShortHelp, MSG_PRF_CONNECTION_HELP,
End,
End,
Child, ColGroup(2),
Child, Label2(MSG_PRF_DLPATH),
Child, HGroup,
Child, DownloadPathString = PopaslObject,
MUIA_Popstring_String, StringObject,
StringFrame,
MUIA_String_MaxLen, 256,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_DLPATH_HELP,
End,
MUIA_Popstring_Button, PopButton(MUII_PopFile),
MUIA_Popasl_Type, ASL_FileRequest,
ASLFR_TitleText, MSG_PRF_DLPATH_REQ,
ASLFR_DrawersOnly, TRUE,
End,
Child, Label2(MSG_PRF_NAMELENGTH),
Child, ST_NameLength = StringObject,
StringFrame,
MUIA_HorizWeight, 25,
MUIA_String_Integer, prf->NameLength,
MUIA_String_Accept, "0123456789",
MUIA_String_MaxLen, 4,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_NAMELENGTH_HELP,
End,
End,
End,
End,
Child, VGroup,
MUIA_HelpNode, "conf-opts",
Child, VGroup, GroupFrameT(MSG_PRF_MISC_FRAME),
Child, maketoggle(MSG_PRF_AUTOCONNECT, &AutoConnectToggle),
Child, maketoggle(MSG_PRF_CLEARLIST, &ClearListToggle ),
Child, maketoggle(MSG_PRF_ALWAYSASK, &AskFileToggle ),
Child, maketoggle(MSG_PRF_ADDTOLIBRARY, &AutoAddToggle ),
Child, maketoggle(MSG_PRF_AUTOSAVELIB, &AutoSaveToggle ),
End,
Child, ColGroup(2),
Child, Label2(MSG_PRF_AUTOCLEANUP_TMP),
Child, CY_AutoCleanup = CycleObject,
MUIA_Cycle_Active, prf->AutoCleanup,
MUIA_Cycle_Entries, AutoCleanupOpts,
MUIA_ShortHelp, MSG_PRF_AUTOCLEANUP_HELP,
End,
Child, Label2(MSG_PRF_SERVERLIST),
Child, CY_ServerList = CycleObject,
MUIA_Cycle_Active, prf->ServerList,
MUIA_Cycle_Entries, ServerListOpts,
MUIA_ShortHelp, MSG_PRF_SERVERLIST_HELP,
End,
Child, Label2(MSG_PRF_LAMPCLASS),
Child, LampCycle = CycleObject,
MUIA_Cycle_Active, prf->lamps,
MUIA_Cycle_Entries, lamps,
MUIA_ShortHelp, MSG_PRF_LAMPCLASS_HELP,
End,
End,
End,
Child, VGroup,
MUIA_HelpNode, "conf-events",
Child, NListviewObject,
MUIA_NListview_NList, EventList = NListObject,
InputListFrame,
MUIA_NList_SourceArray, events,
End,
End,
Child, ColGroup(2),
Child, Label2(MSG_PRF_COMMAND),
Child, EventScriptString = PopaslObject,
MUIA_Popstring_String, StringObject,
StringFrame,
MUIA_String_MaxLen, 256,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_COMMAND_HELP,
End,
MUIA_Popstring_Button, PopButton(MUII_PopFile),
MUIA_Popasl_Type, ASL_FileRequest,
ASLFR_TitleText, MSG_PRF_SCRIPT_REQ,
End,
Child, Label2(MSG_PRF_SOUND),
Child, HGroup,
Child, EventSoundString = PopaslObject,
MUIA_HorizWeight, 300,
MUIA_Popstring_String, StringObject,
StringFrame,
MUIA_String_MaxLen, 256,
MUIA_CycleChain, 1,
End,
MUIA_Popstring_Button, PopButton(MUII_PopFile),
MUIA_Popasl_Type, ASL_FileRequest,
ASLFR_TitleText, MSG_PRF_SOUND_REQ,
End,
Child, EventTestButton = SimpleButton(MSG_PRF_SOUNDTEST_GAD),
End,
End,
End,
Child, VGroup,
Child, VGroup, GroupFrameT(MSG_PRF_NETWORK_FRAME),
Child, ColGroup(2),
MUIA_HelpNode, "conf-adv",
Child, Label2(MSG_PRF_MAINSERVER),
Child, MetaServerString = StringObject,
StringFrame,
MUIA_String_AdvanceOnCR, TRUE,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_MAINSERVER_HELP,
End,
Child, Label2(MSG_PRF_MP3SERVER),
Child, ServerString = StringObject,
StringFrame,
MUIA_String_AdvanceOnCR, TRUE,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_MP3SERVER_HELP,
End,
/*
Child, Label2(MSG_PRF_VERSION),
Child, VersionString = StringObject,
StringFrame,
MUIA_CycleChain, 1,
End,
*/
Child, Label2(MSG_PRF_LISTENPORT),
Child, HGroup,
Child, PortString = StringObject,
StringFrame,
MUIA_HorizWeight, 90,
MUIA_String_Integer, prf->port,
MUIA_String_Accept, "0123456789",
MUIA_String_MaxLen, 6,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_LISTENPORT_HELP,
End,
Child, Label2(MSG_PRF_BEHINDFW),
Child, FirewallToggle = ImageObject,
ButtonFrame,
MUIA_HorizWeight, 10,
MUIA_Background, MUII_ButtonBack,
MUIA_InputMode, MUIV_InputMode_Toggle,
MUIA_ShowSelState, FALSE,
MUIA_Image_Spec, "6:15",
MUIA_Selected, FALSE,
MUIA_ShortHelp, MSG_PRF_BEHINDFW_HELP,
End,
End,
End,
End,
Child, VGroup, GroupFrameT(MSG_PRF_TRANSFER_FRAME),
Child, ColGroup(4),
Child, Label2(MSG_PRF_DLQUEUE),
Child, DownloadQueueSlider = NewObject(QueueClass->mcc_Class, 0,
MUIA_Slider_Min, 1,
MUIA_Slider_Max, 26,
MUIA_Numeric_Value, 26,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_DLQUEUE_HELP,
TAG_DONE),
Child, Label2(MSG_PRF_TASKPRI),
Child, DownloadPriSlider = NumericbuttonObject,
MUIA_Numeric_Min, -128,
MUIA_Numeric_Max, 0,
MUIA_ShortHelp, MSG_PRF_TASKPRI_HELP,
End,
Child, Label2(MSG_PRF_ULQUEUE),
Child, UploadQueueSlider = NewObject(QueueClass->mcc_Class, 0,
MUIA_Slider_Min, 0,
MUIA_Slider_Max, 26,
MUIA_Numeric_Value, 5,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_ULQUEUE_HELP,
TAG_DONE),
Child, Label2(MSG_PRF_TASKPRI),
Child, UploadPriSlider = NumericbuttonObject,
MUIA_Numeric_Min, -128,
MUIA_Numeric_Max, 0,
MUIA_ShortHelp, MSG_PRF_TASKPRI_HELP,
End,
End,
Child, HGroup,
Child, Label2(MSG_PRF_RETRIES),
Child, ST_QueueRetries = StringObject,
StringFrame,
MUIA_String_Integer, prf->QueueRetries,
MUIA_String_Accept, "0123456789",
MUIA_String_MaxLen, 6,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_RETRIES_HELP,
End,
Child, Label2(MSG_PRF_RETRYDELAY),
Child, ST_QueueDelay = StringObject,
StringFrame,
MUIA_String_Integer, prf->QueueDelay,
MUIA_String_Accept, "0123456789",
MUIA_String_MaxLen, 6,
MUIA_CycleChain, 1,
MUIA_ShortHelp, MSG_PRF_RETRYDELAY_HELP,
End,
End,
End,
End,
End,
Child, HGroup,
Child, SaveButton = SimpleButton(MSG_PRF_SAVE_GAD ),
Child, UseButton = SimpleButton(MSG_PRF_USE_GAD ),
Child, CancelButton = SimpleButton(MSG_PRF_CANCEL_GAD),
End,
End,
TAG_MORE, msg->ops_AttrList))
{
data = INST_DATA(cl,obj);
data->UserString = UserString;
data->PasswordString = PasswordString;
data->EMailString = EMailString;
data->DownloadPathString = DownloadPathString;
data->LinkSpeedCycle = LinkSpeedCycle;
data->ClearListToggle = ClearListToggle;
data->AutoConnectToggle = AutoConnectToggle;
data->AskFileToggle = AskFileToggle;
data->AutoSaveToggle = AutoSaveToggle;
data->AutoAddToggle = AutoAddToggle;
data->LampCycle = LampCycle;
data->CY_ServerList = CY_ServerList;
data->CY_AutoCleanup = CY_AutoCleanup;
data->ST_NameLength = ST_NameLength;
data->EventList = EventList;
data->EventScriptString = EventScriptString;
data->EventSoundString = EventSoundString;
data->MetaServerString = MetaServerString;
data->ServerString = ServerString;
/* data->VersionString = VersionString;*/
data->PortString = PortString;
data->FirewallToggle = FirewallToggle;
data->DownloadQueueSlider = DownloadQueueSlider;
data->DownloadPriSlider = DownloadPriSlider;
data->UploadQueueSlider = UploadQueueSlider;
data->UploadPriSlider = UploadPriSlider;
data->ST_QueueRetries = ST_QueueRetries;
data->ST_QueueDelay = ST_QueueDelay;
data->lastitem = -1;
DoMethod(EMailButton, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, PRF_UPDATE);
DoMethod(EventList, MUIM_Notify, MUIA_NList_EntryClick, MUIV_EveryTime, obj, 1, PRF_ENTRY);
DoMethod(EventTestButton, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, PRF_TESTSND);
DoMethod(FirewallToggle, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, PRF_FIREWALL);
DoMethod(ST_QueueDelay, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, obj, 1, PRF_VALIDDELAY);
DoMethod(SaveButton, MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_SAVE );
DoMethod(UseButton, MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_USE );
DoMethod(CancelButton, MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_CANCEL);
DoMethod(obj, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_CANCEL);
return((ULONG)obj);
}
return(0);
}
void prf_set(struct prfdata *data)
{
set(data->UserString, MUIA_String_Contents, prf->user);
set(data->PasswordString, MUIA_String_Contents, prf->pass);
set(data->EMailString, MUIA_String_Contents, prf->email);
set(data->DownloadPathString, MUIA_String_Contents, prf->dlpath);
set(data->LinkSpeedCycle, MUIA_Cycle_Active, prf->link);
set(data->ClearListToggle, MUIA_Selected, prf->clrlist);
set(data->AutoConnectToggle, MUIA_Selected, prf->autocon);
set(data->AskFileToggle, MUIA_Selected, prf->askfile);
set(data->AutoAddToggle, MUIA_Selected, prf->autoadd);
set(data->AutoSaveToggle, MUIA_Selected, prf->autosave);
set(data->LampCycle, MUIA_Cycle_Active, prf->lamps);
set(data->CY_ServerList, MUIA_Cycle_Active, prf->ServerList);
set(data->CY_AutoCleanup, MUIA_Cycle_Active, prf->AutoCleanup);
set(data->ST_NameLength, MUIA_String_Integer, prf->NameLength);
set(data->MetaServerString, MUIA_String_Contents, prf->mainserver);
set(data->ServerString, MUIA_String_Contents, prf->server);
/* set(data->VersionString, MUIA_String_Contents, prf->napvers);*/
set(data->PortString, MUIA_String_Integer, prf->port);
if (prf->port)
set(data->FirewallToggle, MUIA_Selected, FALSE);
else {
set(data->FirewallToggle, MUIA_Selected, TRUE);
set(data->PortString, MUIA_String_Integer, PRF_DEFAULT_PORT);
}
set(data->DownloadQueueSlider, MUIA_Numeric_Value, prf->DownloadQueueLimit);
set(data->DownloadPriSlider, MUIA_Numeric_Value, prf->DownloadTaskPri );
set(data->UploadQueueSlider, MUIA_Numeric_Value, prf->UploadQueueLimit );
set(data->UploadPriSlider, MUIA_Numeric_Value, prf->UploadTaskPri );
set(data->ST_QueueRetries, MUIA_String_Integer, prf->QueueRetries );
set(data->ST_QueueDelay, MUIA_String_Integer, prf->QueueDelay );
}
void prf_use(struct prfdata *data)
{
u_long tmp, tmp2;
/* Advanced */
GetAttr(MUIA_String_Contents, data->MetaServerString, &tmp);
if (((char*)tmp)[0]==0) prf->mainserver=NULL; else prf->mainserver=strdup((char*)tmp);
GetAttr(MUIA_String_Contents, data->ServerString, &tmp);
if (((char*)tmp)[0]==0) prf->server=NULL; else prf->server=strdup((char*)tmp);
/*
GetAttr(MUIA_String_Contents, data->VersionString, &tmp);
if (((char*)tmp)[0]==0) prf->napvers=NULL; else prf->napvers=strdup((char*)tmp);
*/
GetAttr(MUIA_Selected, data->FirewallToggle, &tmp);
if (!tmp) {
GetAttr(MUIA_String_Integer, data->PortString, &tmp);
prf->port = (int)tmp;
}
else prf->port = 0;
GetAttr(MUIA_Numeric_Value, data->DownloadQueueSlider, &tmp);
if (tmp > prf->DownloadQueueLimit) {
/* Limit was raised, so we check the queue right away */
prf->DownloadQueueLimit = tmp;
DoMethod(gui->dwin, DL_CHECKQUEUE);
}
else prf->DownloadQueueLimit = tmp;
GetAttr(MUIA_Numeric_Value, data->DownloadPriSlider, &tmp);
prf->DownloadTaskPri = tmp;
GetAttr(MUIA_Numeric_Value, data->UploadQueueSlider, &tmp);
prf->UploadQueueLimit = tmp;
GetAttr(MUIA_Numeric_Value, data->UploadPriSlider, &tmp);
prf->UploadTaskPri = tmp;
GetAttr(MUIA_String_Integer, data->ST_QueueRetries, &tmp);
prf->QueueRetries = (int)tmp;
GetAttr(MUIA_String_Integer, data->ST_QueueDelay, &tmp);
if ((int)tmp > 0) {
prf->QueueDelay = (int)tmp;
DoMethod(gui->dwin, DL_SETDELAY, prf->QueueDelay);
}
/* User */
GetAttr(MUIA_String_Contents, data->UserString, &tmp);
if (((char*)tmp)[0]==0) prf->user=NULL; else prf->user=strdup((char*)tmp);
GetAttr(MUIA_String_Contents, data->PasswordString, &tmp);
if (((char*)tmp)[0]==0) prf->pass=NULL; else prf->pass=strdup((char*)tmp);
GetAttr(MUIA_String_Contents, data->EMailString, &tmp);
if (((char*)tmp)[0]==0) prf->email=NULL; else prf->email=strdup((char*)tmp);
GetAttr(MUIA_String_Contents, data->DownloadPathString, &tmp);
if (((char *)tmp)[0] == 0) prf->dlpath=NULL;
else {
prf->dlpath=strdup((char*)tmp);
DoMethod(gui->shwin, SHARE_SETDIR, prf->dlpath);
}
/* Options */
GetAttr(MUIA_Cycle_Active, data->LinkSpeedCycle, &tmp);
prf->link = tmp;
GetAttr(MUIA_Selected, data->ClearListToggle, &tmp);
prf->clrlist = tmp;
GetAttr(MUIA_Selected, data->AutoConnectToggle, &tmp);
prf->autocon = tmp;
GetAttr(MUIA_Selected, data->AskFileToggle, &tmp);
prf->askfile = tmp;
GetAttr(MUIA_Selected, data->AutoAddToggle, &tmp);
prf->autoadd = tmp;
GetAttr(MUIA_Selected, data->AutoSaveToggle, &tmp);
prf->autosave = tmp;
GetAttr(MUIA_Cycle_Active, data->LampCycle, &tmp);
prf->lamps = tmp;
GetAttr(MUIA_Cycle_Active, data->CY_AutoCleanup, &tmp);
prf->AutoCleanup = tmp;
GetAttr(MUIA_Cycle_Active, data->CY_ServerList, &tmp);
prf->ServerList = tmp;
GetAttr(MUIA_String_Integer, data->ST_NameLength, &tmp);
if ((int)tmp > 7 && (int)tmp < 108) prf->NameLength = (int)tmp;
/* Events */
GetAttr(MUIA_NList_Active, data->EventList, &tmp);
if (tmp != MUIV_NList_Active_Off) {
if (prf_eventflags[tmp]&1) {
GetAttr(MUIA_String_Contents, data->EventScriptString, &tmp2);
if (((char*)tmp2)[0]==0) prf->scripts[tmp]=NULL;
else prf->scripts[tmp]=strdup((char*)tmp2);
}
if (prf_eventflags[tmp]&2) {
GetAttr(MUIA_String_Contents, data->EventSoundString, &tmp2);
if (((char*)tmp2)[0]==0) prf->sounds[tmp]=NULL;
else prf->sounds[tmp]=strdup((char*)tmp2);
}
}
prf_save("ENV:"AMSTER_PREFS);
}
void prf_setup(int argc, char *argv[])
{
memset(prf,0,sizeof(struct prefsdata));
/* defaults */
prf->mainserver = "server.napster.com:8875";
prf->napvers = "Amster "AMSTER_VERSION;
prf->port = PRF_DEFAULT_PORT;
prf->email = "anon@napster.com";
prf->dlpath = "SYS:";
prf->link = 0;
prf->NameLength = 107;
prf->DownloadQueueLimit = 26;
prf->UploadQueueLimit = 2;
prf->UploadTaskPri = -1;
prf->QueueRetries = 180;
prf->QueueDelay = 20;
prf->regflag = 1; /* >:) */
prf->noiconpanel = 1;
}
BOOL prf_load(char *fname)
{
FILE *f;
char tmp[100], *s, *c;
int i;
u_long t;
f=fopen(fname,"r");
if(f==0) return FALSE;
while (fgets(tmp, sizeof(tmp), f)) {
s = strtok(tmp," ");
if (!s) {
continue;
}
else if (strcmp(s, "<search>")==0) {
while(fgets(tmp, sizeof(tmp), f)) {
s = &tmp[0];
c = nap_token(&s);
if (!c) continue;
else if(strcmp(c,"</search>")==0) break;
else if(strcmp(c,"max")==0) {
t = nap_ltoken(&s);
if(t>2 && t<1000) prf->max = t;
}
else if(strcmp(c,"advopts")==0) {
prf->speedqual = nap_ltoken(&s);
prf->speedval = nap_ltoken(&s);
prf->bitratequal = nap_ltoken(&s);
prf->bitrateval = nap_ltoken(&s);
prf->freqqual = nap_ltoken(&s);
prf->freqval = nap_ltoken(&s);
}
}
} else if(strcmp(s,"iconpanel")==0) {
prf->noiconpanel = 0;
} else if(strcmp(s,"mainserver")==0) {
if(s=strtok(NULL,"\n")) prf->mainserver=strdup(s);
} else if(strcmp(s,"server")==0) {
if(s=strtok(NULL,"\n")) prf->server=strdup(s);
/*
} else if(strcmp(s,"napvers")==0) {
if(s=strtok(NULL,"\n")) prf->napvers=strdup(s);
*/
} else if(strcmp(s,"listport")==0) {
if(s=strtok(NULL,"\n")) prf->port = atoi(s);
} else if(strcmp(s,"downloadqueue")==0) {
if(s=strtok(NULL,"\n")) prf->DownloadQueueLimit = atoi(s);
} else if(strcmp(s,"downloadpriority")==0) {
if(s=strtok(NULL,"\n")) prf->DownloadTaskPri = atoi(s);
} else if(strcmp(s,"uploadqueue")==0) {
if(s=strtok(NULL,"\n")) prf->UploadQueueLimit = atoi(s);
} else if(strcmp(s,"uploadpriority")==0) {
if(s=strtok(NULL,"\n")) prf->UploadTaskPri = atoi(s);
} else if(strcmp(s,"queueretries")==0) {
if(s=strtok(NULL,"\n")) prf->QueueRetries = atoi(s);
} else if(strcmp(s,"queuedelay")==0) {
if(s=strtok(NULL,"\n")) {
t = atoi(s);
if (t > 0) prf->QueueDelay = t;
}
}
else if (strcmp(s,"script")==0) {
if (s=strtok(NULL," ")) {
/* Old */
i = atoi(s);
if (i>0 && i<9 && (s=strtok(NULL,"\n")))
prf->scripts[i-1] = strdup(s);
/* New */
else {
if (strcmp(s, "startup") == 0 && (s = strtok(NULL, "\n"))) {
prf->scripts[0] = strdup(s);
} else if (strcmp(s, "exit") == 0 && (s = strtok(NULL, "\n"))) {
prf->scripts[1] = strdup(s);
} else if (strcmp(s, "connect") == 0 && (s = strtok(NULL, "\n"))) {
prf->scripts[2] = strdup(s);
} else if (strcmp(s, "disconnect") == 0 && (s = strtok(NULL, "\n"))) {
prf->scripts[3] = strdup(s);
} else if (strcmp(s, "dlfinish") == 0 && (s = strtok(NULL, "\n"))) {
prf->scripts[4] = strdup(s);
} else if (strcmp(s, "ulfinish") == 0 && (s = strtok(NULL, "\n"))) {
prf->scripts[5] = strdup(s);
} else if (strcmp(s, "transerror") == 0 && (s = strtok(NULL, "\n"))) {
prf->scripts[6] = strdup(s);
} else if (strcmp(s, "mp3play") == 0 && (s = strtok(NULL, "\n"))) {
prf->scripts[7] = strdup(s);
}
}
}
}
else if (strcmp(s,"sound")==0) {
if (s=strtok(NULL," ")) {
/* Old */
i = atoi(s);
if (i>0 && i<8 && (s=strtok(NULL,"\n")))
prf->sounds[i-1] = strdup(s);
/* New */
else {
if (strcmp(s, "startup") == 0 && (s = strtok(NULL, "\n"))) {
prf->sounds[0] = strdup(s);
} else if (strcmp(s, "exit") == 0 && (s = strtok(NULL, "\n"))) {
prf->sounds[1] = strdup(s);
} else if (strcmp(s, "connect") == 0 && (s = strtok(NULL, "\n"))) {
prf->sounds[2] = strdup(s);
} else if (strcmp(s, "disconnect") == 0 && (s = strtok(NULL, "\n"))) {
prf->sounds[3] = strdup(s);
} else if (strcmp(s, "dlfinish") == 0 && (s = strtok(NULL, "\n"))) {
prf->sounds[4] = strdup(s);
} else if (strcmp(s, "ulfinish") == 0 && (s = strtok(NULL, "\n"))) {
prf->sounds[5] = strdup(s);
} else if (strcmp(s, "transerror") == 0 && (s = strtok(NULL, "\n"))) {
prf->sounds[6] = strdup(s);
} else if (strcmp(s, "mp3play") == 0 && (s = strtok(NULL, "\n"))) {
prf->sounds[7] = strdup(s);
}
}
}
} else if(strcmp(s,"user")==0) {
if(s=strtok(NULL,"\n")) prf->user=strdup(s);
} else if(strcmp(s,"pass")==0) {
if(s=strtok(NULL,"\n")) prf->pass=strdup(s);
} else if(strcmp(s,"email")==0) {
if(s=strtok(NULL,"\n")) prf->email=strdup(s);
} else if(strcmp(s,"dlpath")==0) {
if(s=strtok(NULL,"\n")) prf->dlpath=strdup(s);
} else if(strcmp(s,"linktype")==0) {
if(s=strtok(NULL,"\n")) prf->link=atoi(s);
} else if(strcmp(s,"optclrlist")==0) {
prf->clrlist = 1;
} else if(strcmp(s,"autoconnect")==0) {
prf->autocon = 1;
} else if(strcmp(s,"fullpath")==0) {
prf->fullpath = 1;
} else if(strcmp(s,"alwaysaskfilename")==0) {
prf->askfile = 1;
} else if(strcmp(s,"autoaddshares")==0) {
prf->autoadd = 1;
} else if(strcmp(s,"autosaveshares")==0) {
prf->autosave = 1;
} else if(strcmp(s,"lamptype")==0) {
if(s=strtok(NULL,"\n")) prf->lamps=atoi(s);
} else if(strcmp(s,"autocleanup")==0) {
if(s=strtok(NULL,"\n")) prf->AutoCleanup=atoi(s);
} else if(strcmp(s,"serverlist")==0) {
if(s=strtok(NULL,"\n")) prf->ServerList=atoi(s);
} else if(strcmp(s,"namelength")==0) {
if(s=strtok(NULL,"\n")) {
t = atoi(s);
if (t > 7 && t < 108) prf->NameLength = t;
}
}
}
fclose(f);
return TRUE;
}
void prf_save(char *fname)
{
FILE *f;
u_long tmp;
f=fopen(fname,"w");
if(f==0) {
gui_debug((char *)MSG_ERROR_SAVE);
return;
}
GetAttr(MUIA_Menuitem_Checked,gui->iconpanelmenu,&tmp);
if (tmp==TRUE) fprintf(f,"iconpanel \n");
/* Advanced */
if (prf->mainserver) fprintf(f, "mainserver %s\n", prf->mainserver);
if (prf->server) fprintf(f, "server %s\n", prf->server);
/*
if (prf->napvers) fprintf(f, "napvers %s\n", prf->napvers);
*/
fprintf(f, "listport %d\n", prf->port);
fprintf(f, "downloadqueue %d\n", prf->DownloadQueueLimit);
fprintf(f, "downloadpriority %d\n", prf->DownloadTaskPri);
fprintf(f, "uploadqueue %d\n", prf->UploadQueueLimit);
fprintf(f, "uploadpriority %d\n", prf->UploadTaskPri);
fprintf(f, "queueretries %d\n", prf->QueueRetries);
fprintf(f, "queuedelay %d\n", prf->QueueDelay);
/* User */
if (prf->user) fprintf(f,"user %s\n",prf->user);
if (prf->pass) fprintf(f,"pass %s\n",prf->pass);
if (prf->email) fprintf(f,"email %s\n",prf->email);
if (prf->dlpath) fprintf(f,"dlpath %s\n",prf->dlpath);
fprintf(f,"linktype %d\n",prf->link);
/* Options */
if (prf->clrlist) fprintf(f,"optclrlist \n");
if (prf->autocon) fprintf(f,"autoconnect \n");
if (prf->fullpath) fprintf(f,"fullpath \n");
if (prf->askfile) fprintf(f,"alwaysaskfilename \n");
if (prf->autoadd) fprintf(f,"autoaddshares \n");
if (prf->autosave) fprintf(f,"autosaveshares \n");
fprintf(f, "lamptype %d\n", prf->lamps);
fprintf(f, "autocleanup %d\n", prf->AutoCleanup);
fprintf(f, "serverlist %d\n", prf->ServerList);
fprintf(f, "namelength %d\n", prf->NameLength);
/* Events */
/* Old */
/*
for (i=0;i<8;i++) {
if(prf->scripts[i]) fprintf(f, "script %d %s\n", i+1, prf->scripts[i]);
if(prf->sounds[i]) fprintf(f, "sound %d %s\n", i+1, prf->sounds[i]);
}
*/
/* New */
if (prf->scripts[PRFE_STARTUP]) fprintf(f, "script startup %s\n", prf->scripts[PRFE_STARTUP] );
if (prf->sounds[PRFE_STARTUP]) fprintf(f, "sound startup %s\n", prf->sounds[PRFE_STARTUP] );
if (prf->scripts[PRFE_EXIT]) fprintf(f, "script exit %s\n", prf->scripts[PRFE_EXIT] );
if (prf->sounds[PRFE_EXIT]) fprintf(f, "sound exit %s\n", prf->sounds[PRFE_EXIT] );
if (prf->scripts[PRFE_CONNECT]) fprintf(f, "script connect %s\n", prf->scripts[PRFE_CONNECT] );
if (prf->sounds[PRFE_CONNECT]) fprintf(f, "sound connect %s\n", prf->sounds[PRFE_CONNECT] );
if (prf->scripts[PRFE_DISCONNECT]) fprintf(f, "script disconnect %s\n", prf->scripts[PRFE_DISCONNECT]);
if (prf->sounds[PRFE_DISCONNECT]) fprintf(f, "sound disconnect %s\n", prf->sounds[PRFE_DISCONNECT] );
if (prf->scripts[PRFE_DLFINISH]) fprintf(f, "script dlfinish %s\n", prf->scripts[PRFE_DLFINISH] );
if (prf->sounds[PRFE_DLFINISH]) fprintf(f, "sound dlfinish %s\n", prf->sounds[PRFE_DLFINISH] );
if (prf->scripts[PRFE_ULFINISH]) fprintf(f, "script ulfinish %s\n", prf->scripts[PRFE_ULFINISH] );
if (prf->sounds[PRFE_ULFINISH]) fprintf(f, "sound ulfinish %s\n", prf->sounds[PRFE_ULFINISH] );
if (prf->scripts[PRFE_DLERROR]) fprintf(f, "script transerror %s\n", prf->scripts[PRFE_DLERROR] );
if (prf->sounds[PRFE_DLERROR]) fprintf(f, "sound transerror %s\n", prf->sounds[PRFE_DLERROR] );
if (prf->scripts[PRFE_PLAYMP3]) fprintf(f, "script mp3play %s\n", prf->scripts[PRFE_PLAYMP3] );
if (prf->sounds[PRFE_PLAYMP3]) fprintf(f, "sound mp3play %s\n", prf->sounds[PRFE_PLAYMP3] );
DoMethod(gui->searchpanel, SEARCH_GET);
fprintf(f,"<search> \n");
fprintf(f,"advopts");
fprintf(f," %d",prf->speedqual);
fprintf(f," %d",prf->speedval);
fprintf(f," %d",prf->bitratequal);
fprintf(f," %d",prf->bitrateval);
fprintf(f," %d",prf->freqqual);
fprintf(f," %d\n",prf->freqval);
fprintf(f,"max %d\n",prf->max);
fprintf(f,"</search>\n");
fclose(f);
}
void prf_entry(struct prfdata *data)
{
u_long tmp,tmp2;
GetAttr(MUIA_NList_EntryClick, data->EventList, &tmp);
set(data->EventScriptString, MUIA_Disabled, FALSE);
set(data->EventSoundString, MUIA_Disabled, FALSE);
if (tmp==-1 || tmp==-2) return;
if (data->lastitem != -1) {
int i = data->lastitem;
if (prf_eventflags[i]&1) {
GetAttr(MUIA_String_Contents, data->EventScriptString, &tmp2);
if (((char*)tmp2)[0]==0) prf->scripts[i]=NULL;
else prf->scripts[i]=strdup((char*)tmp2);
}
if (prf_eventflags[i]&2) {
GetAttr(MUIA_String_Contents, data->EventSoundString, &tmp2);
if (((char*)tmp2)[0]==0) prf->sounds[i]=NULL;
else prf->sounds[i]=strdup((char*)tmp2);
}
}
data->lastitem = tmp;
set(data->EventScriptString, MUIA_String_Contents, prf->scripts[tmp]);
set(data->EventSoundString, MUIA_String_Contents, prf->sounds[tmp]);
if (!(prf_eventflags[tmp]&1))
set(data->EventScriptString, MUIA_Disabled, TRUE);
if (!(prf_eventflags[tmp]&2))
set(data->EventSoundString, MUIA_Disabled, TRUE);
}
void prf_event(enum Event no, ...)
{
char *command;
char buf[1024];
va_list ap;
BOOL alloc = FALSE;
if (prf_eventflags[no]&2 && prf->sounds[no])
snd_play(prf->sounds[no]);
if (prf_eventflags[no]&1 && prf->scripts[no]) {
va_start(ap, no);
sprintf(buf, "Run <>NIL: %s", prf->scripts[no]);
switch (no) {
case PRFE_DLFINISH:
case PRFE_ULFINISH:
case PRFE_DLERROR:
case PRFE_PLAYMP3:
command = strrep(buf, "%f", va_arg(ap, char *));
alloc = TRUE;
break;
default:
command = buf;
}
Execute(command, 0, 0);
va_end(ap);
if (alloc) free(command);
}
}